package implement

import (
	"errors"
	"fmt"
	"sync"
)

// Task 定义任务结构体
type Task struct {
	ID int
}

// Execute 定义任务的执行方法
func (t *Task) Execute() error {
	// 这里可以添加具体的任务执行逻辑
	fmt.Printf("Executing task with ID: %d\n", t.ID)
	return nil // 返回nil表示任务执行成功
}

// TaskQueue 定义任务队列结构体
type TaskQueue struct {
	tasks []Task
	mu    sync.Mutex // 添加互斥锁以保护队列
}

// Enqueue 添加任务到队列
func (q *TaskQueue) Enqueue(task Task) {
	q.mu.Lock()         // 在修改队列前加锁
	defer q.mu.Unlock() // 使用defer确保在函数返回前解锁
	q.tasks = append(q.tasks, task)
}

// Dequeue 从队列获取任务
func (q *TaskQueue) Dequeue() (Task, error) {
	q.mu.Lock()         // 在访问队列前加锁
	defer q.mu.Unlock() // 使用defer确保在函数返回前解锁
	if len(q.tasks) == 0 {
		return Task{}, errors.New("queue is empty")
	}
	task := q.tasks[0]
	q.tasks = q.tasks[1:]
	return task, nil
}
